package asignacionDeRevisores;

import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

	import java.util.ArrayList;
	import java.util.Calendar;
	import java.util.List;
	import org.junit.*;

import asignacionDeRevisores.AsignacionPorAlta;

	import sistema.AreaDeInteres;
import sistema.Usuario;


	public class AsignacionPorAltaTestCase {
		// Seccion 1 Extras
			private AsignacionPorAlta asignador = new AsignacionPorAlta(); 
		// Seccion 3 Lista de usuarios
			private List<Usuario> enOrden = new ArrayList<Usuario>();
			private List<Usuario> aOrdenar = new ArrayList<Usuario>();
			private Usuario mUsuarioAntiguo = mock(Usuario.class);
			private Usuario mUsuarioViejo = mock(Usuario.class);
			private Usuario mUsuarioActual = mock(Usuario.class);
			private Usuario mUsuarioFuturo = mock(Usuario.class);
			private Usuario rUsuarioAntiguo;
			private Usuario rUsuarioViejo;
			private Usuario rUsuarioActual;
			private Usuario rUsuarioFuturo;
			// Sección 4 Calendar
			private Calendar ahora = Calendar.getInstance();
			private Calendar manana = Calendar.getInstance();
			private Calendar ayer = Calendar.getInstance();
			private Calendar antiguo = Calendar.getInstance();
			
			// Sección 5 Areas
			private AreaDeInteres unArea = new AreaDeInteres("Matematica");
			private AreaDeInteres otraArea = new AreaDeInteres("Ciencias Sociales");
			private AreaDeInteres ultimaArea = new AreaDeInteres("Filosofia");
			private AreaDeInteres noArea = new AreaDeInteres("Singularidad, Kirk Cpt.");
			
			private List<Usuario> uOrdenados;
			private List<Usuario> uDesordenados;
					
		@Before
			public void setUp(){
			// Sección 4 Calendar
			antiguo.set(1009, Calendar.JUNE, 01);
			ayer.set(2010, Calendar.JUNE, 01);
			ahora.set(2011, Calendar.JUNE, 01);
			manana.set(2012, Calendar.JUNE, 01);
			// Sección 2 Usuarios
										
			when(mUsuarioAntiguo.getFecha()).thenReturn(antiguo);
			when(mUsuarioAntiguo.getFecha()).thenReturn(ayer);
			when(mUsuarioAntiguo.getFecha()).thenReturn(ahora);
			when(mUsuarioAntiguo.getFecha()).thenReturn(manana);
			/**
			 * public Usuario(String nombre, String apellido, String userName, String password, String email,
			 * 					Calendar fechaDeAlta, AreaDeInteres areasDeInteres)
			*/
			rUsuarioAntiguo = new Usuario("nombre", "apellido", "userName", "password", "email",this.antiguo, unArea);
		    rUsuarioViejo 	= new Usuario("nombre", "apellido", "userName", "password", "email",this.ayer, otraArea);
			rUsuarioActual	= new Usuario("nombre", "apellido", "userName", "password", "email",this.ahora, ultimaArea);
			rUsuarioFuturo	= new Usuario("nombre", "apellido", "userName", "password", "email",this.manana, noArea);
			
			// Sección 3	Lista de usuarios
			enOrden.add(mUsuarioAntiguo);
			enOrden.add(mUsuarioViejo);
			enOrden.add(mUsuarioActual);
			enOrden.add(mUsuarioFuturo);
			aOrdenar.add(mUsuarioActual);
			aOrdenar.add(mUsuarioFuturo);
			aOrdenar.add(mUsuarioAntiguo);
			aOrdenar.add(mUsuarioViejo);
			
			uOrdenados = new ArrayList<Usuario>();
			uDesordenados = new ArrayList<Usuario>();
			
			uOrdenados.add(rUsuarioAntiguo);
			uOrdenados.add(rUsuarioViejo);
			uOrdenados.add(rUsuarioActual);
			uOrdenados.add(rUsuarioFuturo);
			uDesordenados.add(rUsuarioActual);
			uDesordenados.add(rUsuarioFuturo);
			uDesordenados.add(rUsuarioAntiguo);
			uDesordenados.add(rUsuarioViejo);	
			
			// FIN DEL testSETUP
			// FIN DEL testSETUP
			// FIN DEL testSETUP
			}
		@Test
		public void testAAOrdenarRevisoresPorFecha(){
			assertTrue((asignador.ordenarRevisoresPorFechaDeAlta(this.uDesordenados)).containsAll(uOrdenados));
		}
		
		public void testAAAsignarRevisores(){
			/**
			 * _OrdenarRevisoresPorFecha() fue testeado arriba.
			 * _obtenerListaDePapers(cfp) fue testeado en la superclaseTest.
			 * _asignarPapersARevisores(listaRevisores,papers) fue testeado en el test de la superclase.
			 *  */
		
		}

	}


